
//1283.使结果不超过阈值的最小整数
class Solution {

    //计算如果除数是x结果时多少
    int div(vector<int>& nums,int x)
    {
        int ret=0;
        for(auto e:nums) ret+=(e+x-1)/x;

        return ret;
    }
public:
    int smallestDivisor(vector<int>& nums, int threshold) {

        int n=nums.size();        
        //以数组小标表示除数，随着下标增大结果也在减小所以可以使用二分
        int left=0,right=ranges::max(nums);   //使用左开右开的形式  n<=threshold所以最大值是除数为nums[n-1]时结果是n
        while(left+1<right)
        {
            int mid=left+(right-left)/2;
            if(div(nums,mid)<=threshold) right=mid;  //满足条件
            else left=mid;   //不满足条件
        }
        return right;
    }
};